//
// Created by sjjmw on 3/24/2022.
//
#include "iostream"
#include "vector"
#include "list"
#include "algorithm"
#include "string"
#include "unordered_map"
//#include "map"
struct Struct{
    std::string str;
    int time;
};
struct Rec{
    int time;
    int cnt;
};
bool cmp(Struct&a,Struct&b){
    if(a.str.size()>b.str.size()){
        return true;
    }
    if(a.str.size()==b.str.size()){
        return a.time<b.time;
    }
    return false;
}
void handle(int n
            ){
    std::string str1;
    std::getline(std::cin,str1);
    std::getline(std::cin,str1);
    std::unordered_map<std::string,Rec> str_cnt;
//    int max_len=0;
    int max_cnt=0;
    int create_time=0;
    for(int w=n;w<=str1.size();w++){
        for(int off=0;off<=str1.size()-w;off++){
            std::string sub=str1.substr(off,w);
            if(str_cnt.find(sub)==str_cnt.end()){
                str_cnt[sub]= {create_time,1};
                if(max_cnt==0){
                    max_cnt=1;
                }
                create_time++;
//                if(sub.size()>max_len){
//                    max_len=sub.size();
//                }
            }else{
                str_cnt[sub].cnt++;
                if(max_cnt<str_cnt[sub].cnt){
                    max_cnt=str_cnt[sub].cnt;
                }
            }
        }
    }
    std::vector<Struct> vec;
    for(auto&par:str_cnt){
        if(
        par.second.cnt==max_cnt
        ){
            vec.push_back({par.first,par.second.time});
//            std::cout<<par.first<<std::endl;
//            break;
        }
    }
    std::sort(vec.begin(),vec.end(),cmp);
//    ;
    std::cout<<vec[0].str<< std::endl;
}

int main(){
    int a,b,c;
    while(
            std::cin>>a
    ){
        handle(a);
    }
    return 0;
}